home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / mach / ds3100.md / mach.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  6KB  |  189 lines

  1. /*
  2.  * mach.h --
  3.  *
  4.  *         Exported structures for the mach module.
  5.  *
  6.  *    Copyright (C) 1989 Digital Equipment Corporation.
  7.  *    Permission to use, copy, modify, and distribute this software and
  8.  *    its documentation for any purpose and without fee is hereby granted,
  9.  *    provided that the above copyright notice appears in all copies.
  10.  *    Digital Equipment Corporation makes no representations about the
  11.  *    suitability of this software for any purpose.  It is provided "as is"
  12.  *    without express or implied warranty.
  13.  *
  14.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/mach/ds3100.md/mach.h,v 9.7 92/08/10 17:58:14 mgbaker Exp $ SPRITE (Berkeley)
  15.  */
  16.  
  17. #ifndef _MACH
  18. #define _MACH
  19.  
  20. #ifdef KERNEL
  21. #include "machTypes.h"
  22. #include "user/fmt.h"
  23. #else
  24. #include <kernel/machTypes.h>
  25. #include <fmt.h>
  26. #endif
  27.  
  28. /*
  29.  * Macros to disable and enable interrupts.
  30.  */
  31. #define DISABLE_INTR() \
  32.     if (!Mach_AtInterruptLevel()) { \
  33.     Mach_DisableIntr(); \
  34.     if (mach_NumDisableIntrsPtr[0] < 0) { \
  35.         panic("Negative interrupt count.\n"); \
  36.     } \
  37.     mach_NumDisableIntrsPtr[0]++; \
  38.     }
  39. #define ENABLE_INTR() \
  40.     if (!Mach_AtInterruptLevel()) { \
  41.     mach_NumDisableIntrsPtr[0]--; \
  42.     if (mach_NumDisableIntrsPtr[0] < 0) { \
  43.         panic("Negative interrupt count.\n"); \
  44.     } \
  45.     if (mach_NumDisableIntrsPtr[0] == 0) { \
  46.         Mach_EnableIntr(); \
  47.     } \
  48.     }
  49.  
  50. /*
  51.  * Macro to get level of nesting of disabled interrupts.
  52.  */
  53. #define Mach_IntrNesting(cpu) (mach_NumDisableIntrsPtr[(cpu)])
  54.  
  55. /*
  56.  * A macro to test if the current processor is at interrupt level.
  57.  */
  58. #define    Mach_AtInterruptLevel()    (mach_AtInterruptLevel)
  59.  
  60. /*
  61.  * A macro to test if the current processor is in kernel mode.
  62.  */
  63. #define    Mach_KernelMode() (mach_KernelMode)
  64.  
  65. /*
  66.  * Delay for N microseconds.
  67.  */
  68. #define    MACH_DELAY(n)    { register int N = (n)*6; while (N > 0) {N--;} }
  69.  
  70. extern Mach_State *machCurStatePtr;
  71. /*
  72.  * Macro to get the user's stack pointer.
  73.  */
  74. #define Mach_UserStack()\
  75.     ((Address)(machCurStatePtr->userState.regState.regs[SP]))
  76.  
  77. /*
  78.  * Dispatch tables for kernel calls.
  79.  */
  80. extern ReturnStatus (*(mach_NormalHandlers[]))();
  81. extern ReturnStatus (*(mach_MigratedHandlers[]))();
  82.  
  83. /*
  84.  * Macro to get processor number
  85.  */
  86. #define    Mach_GetProcessorNumber()     0
  87.  
  88. extern    Boolean    mach_KernelMode;
  89. extern    int    mach_NumProcessors;
  90. extern    Boolean    mach_AtInterruptLevel;
  91. extern    int    *mach_NumDisableIntrsPtr;
  92. /*
  93.  * mach_MachineType is a string used to expand $MACHINE in pathnames.
  94.  */
  95. extern    char    *mach_MachineType;
  96.  
  97. /*
  98.  * mach_Format defines a byte ordering/structure alignment type
  99.  * used when servicing IOControls.  The input and output buffers for
  100.  * IOControls have to be made right by the server.
  101.  */
  102. extern    Fmt_Format    mach_Format;
  103.  
  104. /*
  105.  * Routine to initialize mach module.  Must be called first as part of boot
  106.  * sequence.
  107.  */
  108. extern void Mach_Init _ARGS_((int boot_argc, MachStringTable *boot_argv));
  109.  
  110. /*
  111.  * Routines to munge machine state struct.
  112.  */
  113. extern void Mach_InitFirstProc _ARGS_((Proc_ControlBlock *procPtr));
  114. extern ReturnStatus Mach_SetupNewState _ARGS_((Proc_ControlBlock *procPtr, Mach_State *fromStatePtr, void (*startFunc)(), Address startPC, Boolean user));
  115. extern void Mach_SetReturnVal _ARGS_((Proc_ControlBlock *procPtr, int retVal,
  116.     int retVal2));
  117. extern void Mach_StartUserProc _ARGS_((Proc_ControlBlock *procPtr, Address entryPoint));
  118. extern void Mach_ExecUserProc _ARGS_((Proc_ControlBlock *procPtr, Address userStackPtr, Address entryPoint));
  119. extern void Mach_FreeState _ARGS_((Proc_ControlBlock *procPtr));
  120. extern void Mach_CopyState _ARGS_((Mach_State *statePtr, Proc_ControlBlock *destProcPtr));
  121. extern void Mach_GetDebugState _ARGS_((Proc_ControlBlock *procPtr, Proc_DebugState *debugStatePtr));
  122. extern void Mach_SetDebugState _ARGS_((Proc_ControlBlock *procPtr, Proc_DebugState *debugStatePtr));
  123. extern Address Mach_GetUserStackPtr _ARGS_((Proc_ControlBlock *procPtr));
  124.  
  125. /*
  126.  * Migration routines.
  127.  */
  128. extern ReturnStatus Mach_EncapState _ARGS_((register Proc_ControlBlock *procPtr, int hostID, Proc_EncapInfo *infoPtr, Address buffer));
  129. extern ReturnStatus Mach_DeencapState _ARGS_((register Proc_ControlBlock *procPtr, Proc_EncapInfo *infoPtr, Address buffer));
  130. extern ReturnStatus Mach_GetEncapSize _ARGS_((Proc_ControlBlock *procPtr, int hostID, Proc_EncapInfo *infoPtr));
  131. extern Boolean Mach_CanMigrate _ARGS_((Proc_ControlBlock *procPtr));
  132. extern int Mach_GetLastSyscall _ARGS_((void));
  133.  
  134.  
  135. /*
  136.  * Other routines.
  137.  */
  138. extern void Mach_InitSyscall _ARGS_((int callNum, int numArgs, ReturnStatus (*normalHandler)(), ReturnStatus (*migratedHandler)()));
  139.  
  140. extern int Mach_GetNumProcessors _ARGS_((void));
  141. extern Mach_ProcessorStates Mach_ProcessorState _ARGS_((int processor));
  142. extern Address            Mach_GetPC();
  143. /*
  144.  * Machine dependent routines.
  145.  */
  146. extern void Mach_GetEtherAddress _ARGS_((Net_EtherAddress *etherAddrPtr));
  147. extern    void        Mach_ContextSwitch();
  148. extern    int        Mach_TestAndSet();
  149. extern int Mach_GetMachineArch _ARGS_((void));
  150. extern int Mach_GetMachineType _ARGS_((void));
  151. extern Address Mach_GetStackPointer _ARGS_((Proc_ControlBlock *procPtr));
  152. extern void Mach_CheckSpecialHandling _ARGS_((int pnum));
  153. extern int Mach_GetBootArgs _ARGS_((int argc, int bufferSize, char **argv, char *buffer));
  154. extern  ReturnStatus    Mach_Probe _ARGS_((int size, Address srcAddress,
  155.                     Address, destAddress));
  156. extern  ReturnStatus    Mach_ProbeAddr _ARGS_((int numArgs));
  157. extern void Mach_FlushCode _ARGS_((Address addr, unsigned len));
  158. extern void Mach_Return2 _ARGS_((int val));
  159. extern int Mach_SigreturnStub _ARGS_((struct sigcontext *sigContextPtr));
  160.  
  161. /*
  162.  * Machine dependent variables.
  163.  */
  164. extern    Address    mach_KernStart;
  165. extern    Address    mach_CodeStart;
  166. extern    Address    mach_StackBottom;
  167. extern    int    mach_KernStackSize;
  168. extern    Address    mach_KernEnd;
  169. extern    Address    mach_FirstUserAddr;
  170. extern    Address    mach_LastUserAddr;
  171. extern    Address    mach_MaxUserStackAddr;
  172. extern    int    mach_LastUserStackPage;
  173.  
  174. /*
  175.  * Set the errno for Unix compatible system calls.
  176.  */
  177. #define Mach_SetErrno(err) Proc_GetActualProc()->unixErrno = (err)
  178.  
  179. /*
  180.  * Fast recovery definitions.
  181.  */
  182. extern  int     storedDataSize;
  183. extern  char    storedData[];
  184. extern  char    *mach_RestartTablePtr;
  185. extern  ReturnStatus    Mach_FastBoot _ARGS_((void));
  186. extern  int     Mach_GetRestartTableSize _ARGS_((void));
  187.  
  188. #endif /* _MACH */
  189.